package com.purchase.ml.service.dealer;

import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.service.IService;
import com.purchase.ml.bean.base.ApiRestResult;
import com.purchase.ml.bean.req.dealer.*;
import com.purchase.ml.bean.req.mail.DealerStateEditDto;
import com.purchase.ml.bean.res.dealer.SysDealerRes;
import com.purchase.ml.bean.vo.dealer.DealerVo;
import com.purchase.ml.entity.dealer.SysDealer;

import java.security.NoSuchAlgorithmException;
import java.util.List;
import java.util.Map;

/**
 * @author :zxm
 * @date :2021/2/25 11:14
 * @description :some description
 **/
public interface SysDealerService extends IService<SysDealer>{

    /**
     * 创建经销商
     * @param sysDealerNewDto
     * @return
     */
    ApiRestResult createDealer(SysDealerNewDto sysDealerNewDto);

    /**
     * 修改经销商
     * @param sysDealerEditDto
     * @return
     */
    ApiRestResult editDealer(SysDealerEditDto sysDealerEditDto);

    /**
     * 分页查询经销商
     * @param sysDealerQueryDto
     * @return
     */
    IPage<SysDealer> masterDealerQuery(SysDealerQueryDto sysDealerQueryDto);

    /**
     * 查询所有的主经销商
     * @return
     */
    List<SysDealerRes> queryMasterDealer();

    /**
     * 管理员查询经销商
     * @param sysDealerQueryDto
     * @return
     */
    IPage<SysDealer> queryPendingDealer(SysDealerQueryDto sysDealerQueryDto);

    /**
     * 当经销商注册后，点击邮件中的认证邮箱按钮触发
     */
    void notifyMail(String token);

    /**
     * 经销商申请注册，主经销商认证通过
     * @param dto
     */
    void verifyDealer(DealerStateEditDto dto);

    /**
     * @description: 获取当前用户下 经销商
     * @author kyyang
     * @date 2021/3/7 19:10
     * @version 1.0
     */
    List<DealerVo> getCurrentUserDear();

    /**
     * 通过经销商id查询经销商
     * @return
     */
    SysDealer queryDealerByDealerId(SysDealerDto dto);

    /**
     * 根据经销商id删除经销商
     * @param ids
     */
    void batchDeleteDealer(List<Long> ids);

    /**
     * 根据主经销商id查询经销商
     * @param sysDealerQueryDto
     * @return
     */
    IPage<SysDealer> queryAllDealerById(SysDealerQueryDto sysDealerQueryDto);
    /**
     * 更新经销商的状态为已付款；修改注册码为顺序注册码
     */
     int updateDealerStateEnable(Long dealerId);
    /**
     * 通过dealerId查询经销商
     * @param dealerId
     * @return
     */
    SysDealer findByDealerId(Long dealerId);

    /**
     * 修改经销商状态
     * @param dto
     * @return
     */
    boolean updateStateById(DealerStateEditDto dto);

    /**
     * 经销商支付年费
     * @param dto
     * @return
     */
    Map<String,String> registerPay(SysDealerRegisterPayDto dto) throws NoSuchAlgorithmException;

    /**
     * 查询当前经销商
     * @return
     */
    SysDealer findCurrentDealer();

    /**
     * @description    :仪表盘查询所有待定的经销商
     * @author         :zxm
     * @date           :2021/4/8 9:55
     * @param          :[dto]
     * @return         :com.baomidou.mybatisplus.core.metadata.IPage<com.purchase.ml.entity.dealer.SysDealer>
    **/
    IPage<SysDealer> findAllPendingDealer(SysDealerQueryDto dto);
}
